﻿using AlgoritmoConstrutivo.entidades;
using Entidades.entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algoritmos.clustersPorVizinho
{
    //configuracao 0
    class NosHandler_BestFit : NosHandler
    {
 
        private Decimal maiorMf = -1;
        private Decimal mfClusterDestino = -1;
        

        public override void alocarNos(No n, int NUM_CLUSTERS, Grafo software, out int melhorCluster)
        {
             melhorCluster = -1; // se eu nao reinicializar ele aqui, pode ser que ele fique com o valor do melhor cluster da geração antiga.
             maiorMf = -1;


                if (n.Cluster != null)
                    return;

                for (int cluster = 0; cluster < NUM_CLUSTERS; cluster++) //para cada cluster m
                {
                    mfClusterDestino = 0; //cuidado com esta modificação.
                    if (software.RetornarCluster(cluster).RetornarNumNosCluster() == 0 || !software.RetornarCluster(cluster).AvaliaInsercaoDeUmNo(software, n.Id, out mfClusterDestino))
                        continue;

                    if (mfClusterDestino > maiorMf)
                    {
                        maiorMf = mfClusterDestino;
                        melhorCluster = cluster;
                    }
                }
        }
    }
}
